package 栈;

import java.util.ArrayList;
import java.util.Arrays;

public class myStack<E> {
    //底层是一个E类型的数组
    private E[]elementData;
    //初始值
    private static final int DEFAULT_SIZE=5;
    //记录栈内有效元素个数，也可以作为入栈的下标
    private int underSize=0;

    //构造一个空的栈
    public myStack(){
        this.elementData=(E[])(new Object[DEFAULT_SIZE]);
    }
    //判满
    private boolean isFull(){
        if(underSize>=elementData.length){
            return true;
        }
        return false;
    }
    //将e入栈，并返回e
    public E push(E e) {
        if(isFull()){//扩容
            this.elementData=Arrays.copyOf(this.elementData,elementData.length*2);
        }
        elementData[underSize++]=e;
        return e;
    }
    //将栈顶元素出栈并返回
    public E pop() {
        //下次再往underSize下标插入就覆盖了
        if(!empty()){
            throw new RuntimeException("栈为空！");
        }
        return elementData[--underSize];

    }
    //获取栈顶元素
    public E peek() {
        if(!empty()){
            throw new RuntimeException("栈为空！");
        }
        return elementData[underSize-1];
    }
    //获取栈中有效元素个数
    public int size() {
        return underSize;
    }
    //检测栈是否为空
    public boolean empty() {
        if(underSize==0)return true;
        return false;
    }
}
